A storage server is a type of network storage controller which is a special purpose data processing system used to store and retrieve data on behalf of one or more clients on a network. A storage server operates on behalf of one or more clients to store and manage data in a set of mass storage devices, such as magnetic or optical storage-based disks or tapes. In conventional network storage systems, the mass storage devices may be organized into one or more groups of drives (e.g., redundant array of inexpensive disks (RAID)). A storage server also typically includes internal memory that is used as a buffer cache, to speed up the reading and writing of data from and to (respectively) the main mass storage system. In conventional storage servers, this buffer cache typically is implemented the form of dynamic random access memory (DRAM).
It is desirable to improve the performance of any data processing system. In the case of a storage server, one way to accomplish this is by reducing the latency and increasing the random access throughput associated with accessing the storage server's main mass storage subsystem. In this regard, flash memory, particularly NAND flash memory, has certain very desirable properties. Flash memory generally has a very fast read access speed compared to that of conventional disk drive. Accordingly, flash based cache is used to temporarily store data in the storage server. The client requests are served by obtaining data from the flash based cache. By having flash based cache in the storage server, the data access speed is improved. The greater the size of the flash cache in the storage server, the more data can be cached in the flash cache, which results in better performance of the application data access from the storage server. However, flash based caching adds cost to the overall storage solution, and inappropriate sizing for flash based cache may result in higher cost of ownership for the system.
Datacenters typically have a number of storage servers. Each of the storage servers may have its own local cache, which can be flash based. Based on the load on each of the storage servers, at any point of time, some storage servers might be seeking more cache to cache more data blocks, whereas other storage servers might not be utilizing all the cache available to them. That is, the cache of some storage servers may be under-utilized, while the cache of other storage servers may be over-utilized. This results in an ineffective and inefficient storage ecosystem, deteriorating the overall performance of the datacenter. One solution to this problem can be to manually uninstall the cache from the under-utilized storage server and install it in the over-utilized storage server. However, this is not an effective solution, at least because it may slow down the overall performance of the storage servers during un-installation and installation of the cache, and because it requires a human to perform the uninstallation and installation of the cache.